#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

// void signal_handler(int signum) {
//     printf("Caught signal %d\n", signum);
// }

// int main() {
//     struct sigaction sa;
//     sigset_t mask;

//     // 设置信号处理函数
//     sa.sa_handler = signal_handler;
//     sa.sa_flags = 0;
//     sigemptyset(&sa.sa_mask);
//     sigaction(SIGINT, &sa, NULL);

//     // 阻止 SIGINT 信号
//     sigemptyset(&mask);
//     sigaddset(&mask, SIGINT);//将SIGINT信号加入信号集中
//     sigprocmask(SIG_BLOCK, &mask, NULL);//mask 信号集中的信号添加到当前进程的信号掩码
//     //进程将不会接收 mask 信号集中的任何信号，直到这些信号从信号掩码中被移除。

//     printf("Blocking SIGINT for 10 seconds\n");
//     sleep(5); // 在这里，如果SIGINT被发送，它将处于未决状态

//     printf("Unblocking SIGINT\n");
//     sigprocmask(SIG_UNBLOCK, &mask, NULL); // 解除对SIGINT的阻止

//     // 现在，如果SIGINT之前处于未决状态，它将被处理

//     return 0;
// }
#include <signal.h>
#include <stdio.h>

void signal_handler(int signum)
{
    printf("Caught signal %d\n", signum);
}

int main()
{
    struct sigaction sa;

    // 初始化 sigaction 结构体
    memset(&sa, 0, sizeof(sa));
    sa.sa_handler = &signal_handler; // 设置信号处理函数
    sigfillset(&sa.sa_mask);         // 在处理函数执行期间阻塞所有信号

    // 使用 sigaction 设置 SIGINT 的处理行为
    if (sigaction(SIGINT, &sa, NULL) == -1)
    {
        perror("sigaction");
        return 1;
    }

    // 主循环
    while (1)
    {
        // 进程继续执行其他任务
    }

    return 0;
}
